/*
 * Buffer(缓冲区)
 * Buffer的结构和数组很像,操作的方法也和数组类似
 * 数组中不能存储二进制文件,而buffer就是专门用来存储二进制文件
 * 使用buffer不需要引入模块,直接使用即可
      ??(存疑,现在浏览器显示好像是10进制)在buffer中存储的数据都是二进制的数据,但是显示的时候都是以16进制的形式显示
 *    buffer中每一个元素的范围是从00-ff(0-255)
 *    00000000 - 11111111
 *    计算机中 一个0 或 一个1 我们称为1位(bit)
 *    8Bit = 1byte(字节) 1024byte=1kb 1024kb=1mb 1024mb=1gb 1024gb=1tb
 *    buffer中的一个元素,占用内存的一个字节
 * buffer的大小一旦确定则不能修改,buffer实际上是对底层内存的直接操作
 */

// var str = 'hello buffer';

// @ 将一个字符串保存到buffer中
// var buf = Buffer.from(str);
// console.log(buf); // [104, 101, 108, 108, 111, 32, 98, 117, 102, 102, 101, 114]
// console.log(str.length); //12 字符串的大小
// console.log(buf.length); //12 占用内存的大小

// var str = 'hello 缓冲区';

// @ 将一个字符串保存到buffer中
// var buf = Buffer.from(str);
// console.log(buf); // [104, 101, 108, 108, 111, 32, 231, 188, 147, 229, 134, 178, 229, 140, 186]
// console.log(str.length); //9 字符串的大小
// console.log(buf.length); //15 占用内存的大小 1个汉字占用3个字节,1个英文占用1个字节

// 创建一个指定大小的buffer(已废弃)
// @ buffer构造函数都是不推荐使用的
// var buf2 = new Buffer(10); //10个字节的buffer
// console.log(buf2); //[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

// # ----------------------------------------------------------------

// @ 创建一个10个字节的buffer
// var buf2 = Buffer.alloc(10);
// console.log(buf2);//[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
// 通过索引,来操作buf中的元素
// buf2[0] = 88;
// buf2[1] = 55;
// buf2[2] = 0xaa;
// buf2[3] = 255;
// buf2[3] = 556; // 44 只取了后八位
// buf2[10] = 16; // 没有第11个空间,不会更改
// console.log(buf2);//[88, 55, 170, 255, 0, 0, 0, 0, 0, 0]
// !只要数字在控制台输或页面中输出一定是十进制
// console.log(buf2[2]); //170
// console.log(buf2[2].toString(16)); //TODO aa 转换成16进制的字符串

// for (const buf of buf2) {
//   // ! 以10进制输出
//    console.log(buf); // 88 255 170 255 0 0 0 0 0 0
// }

// # ------------------------------------------------------------------------------------------------

// @ Buffer.allocUnsafe(size) 创建一个指定大小的buffer,但是buffer中可能含有敏感数据(存疑)
var buf3 = Buffer.allocUnsafe(10);
// console.log(buf3); //[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

// # ------------------------------------------------------------------------------------------------
var buf4 = Buffer.from('我是一段文本数据');
console.log(buf4); //[230, 136, 145, 230, 152, 175, 228, 184, 128, 230, 174, 181, 230, 150, 135, 230, 156, 172, 230, 149, 176, 230, 141, 174]
// @ 将缓冲区中的数据转换为字符串
console.log(buf4.toString()); //我是一段文本数据